如何调用MATLAB自带的BP神经网络工具箱 | 您所在的位置:网站首页 › 颜文字 翅膀 › 如何调用MATLAB自带的BP神经网络工具箱 |
BP神经网络是非常经典且好用的一种学习数据内在规律的拟合-预测模型,具有很强的线性和非线性的映射能力. BP神经网络属于人工神经网络(Artificial Neural Network, ANN)的一种, BP是Back Propagation的缩写,意为反向传播. 反向传播的本质为误差是向后传播, 进而调整神经元的参数. 1943年McCulloch, W.S. 和 W. Pitts[1]最早提出了神经元的数学模型, 1974年Paul J. Werbos[2]正式提出了BP神经网络训练算法, 到目前BP神经网络广泛用于各种预测和控制模型, 已经有数十年的历史,取得了很好的效果. 本文的主旨不在于研究BP神经网络的历史和原理, 主要着眼于其实际使用方法, 下面我们先看调用MATLAB自带的BP神经网络工具箱的代码. 本代码总体流程: (1)首先随机产生200组维度为2的输入数据X, 对X的2维数据求和后加上随机噪声,得到输出数据Y; (2)然后定义训练集和测试集, 就是划分为两个无交集的子集,一个用于训练BP神经网络,一个用于测试BP神经网络; (3)对数据进行归一化处理, BP神经网络要求对数据进行归一化处理, 这样预测效果是最理想的; (4)设置BP神经网络的参数 (5)训练BP神经网络,并输出训练误差曲线 (6)测试BP神经网络,并输出测试结果 %% 本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979 %% BP神经网络 clc;close all;clear all;warning off;%清除变量 rand('seed', 100); randn('seed', 100); format long g; %% (1)首先随机产生200组维度为2的输入数据X, 对X的2维数据求和后加上随机噪声,得到输出数据Y X1=rand(2,200); Y1=sum(X1)+5; Y1=Y1.*(1+(-0.05+0.1*rand(size(Y1)))); %% (2)定义训练集和测试集, 就是划分为两个无交集的子集,一个用于训练BP神经网络,一个用于测试BP神经网络; n1=size(Y1,2); I1=1:n1;%顺序样本 n2=20;%用于测试的样本个数 indextraindata=I1(1:end-n2); indextestdata=I1(end-n2+1:end); % 定义训练集 P1data=X1(:,indextraindata); T1data=Y1(:,indextraindata); % 定义测试集 P2data=X1(:,indextestdata); T2data=Y1(:,indextestdata); %% (3)对数据进行归一化处理 % 训练数据归一化 [input_traindata,inputps]=mapminmax(P1data); [output_traindata,outputps]=mapminmax(T1data); %测试数据归一化 input_testdata=mapminmax('apply',P2data,inputps); %%(4)设置BP神经网络的参数 hidnumber=10;% 设置隐含测节点数 net_new=newff(input_traindata,output_traindata,hidnumber);%新建BP神经网络net % 设置神经网络的参数 net_new.trainparam.epochs=1000;% 设置训练次数 net_new.trainparam.goal=0.000000001;% 设置目标精度 net_new.trainparam.lr=0.1;% 设置学习率 net_new.trainFcn='traingd';% 设置训练函数梯度下降 net_new.divideFcn =''; %% (5)训练BP神经网络,并输出训练误差曲线 [net_new,tr]=train(net_new,input_traindata,output_traindata);% 训练模型 msedata=tr.perf;% 训练误差 epochs201=tr.epoch;% 训练次数 % 绘制训练误差曲线 figure; semilogy(epochs201,msedata); xlabel('训练次数','fontname','宋体'); ylabel('训练误差','fontname','宋体'); title('训练误差曲线','fontname','宋体'); %% (6)测试BP神经网络,并输出测试结果 input_traindata0=input_traindata(:,1:length(indextraindata)); ybptraindata=sim(net_new,input_traindata0); ybptraindata=mapminmax('reverse',ybptraindata,outputps);%预测数据反归一化 ybptestdata=sim(net_new,input_testdata); ybptestdata=mapminmax('reverse',ybptestdata,outputps);%预测数据反归一化 %% 输出结果 msedata=tr.perf; disp('BP神经网络训练的RMSE'); sqrt(msedata(end)) disp('训练集样本编号'); indextraindata disp('测试集样本编号'); indextestdata disp('实际值'); T2data disp('预测结果'); ybptestdata figure; plot(T2data,'bo-'); hold on; plot(ybptestdata,'r*-'); legend({'实际值','BP预测值'},'fontname','宋体'); xlabel('','fontname','宋体'); ylabel('目标值','fontname','宋体'); title('预测结果','fontname','宋体'); figure; plot(ybptestdata-T2data,'bo-'); legend({'绝对误差'},'fontname','宋体'); xlabel('','fontname','宋体'); ylabel('绝对误差','fontname','宋体'); title('绝对误差','fontname','宋体'); figure; plot((ybptestdata-T2data)./T2data*100,'bo-'); legend({'相对误差'},'fontname','宋体'); xlabel('','fontname','宋体'); ylabel('相对误差(%)','fontname','宋体'); title('相对误差','fontname','宋体'); disp('本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979'); %% 本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979 代码运行的结果如下: 有讨论的可以加我q :1579325979 参考文献: [1]McCulloch, W.S. and W. Pitts, A logical calculus of the ideas immanent in nervous activity. The bulletin of mathematical biophysics, 1943. 5(4): p. 115-133. [2]Werbos, P., Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Science. Thesis (Ph. D.). Appl. Math. Harvard University. 1974. |
CopyRight 2018-2019 实验室设备网 版权所有 |